// Copyright 2013 Ronald Schlenker, www.technewlogic.de.
// 
// This file is part of Byond.
// 
// Byond is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 2 of the License, or
// (at your option) any later version.
// 
// Byond is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with Byond.  If not, see <http://www.gnu.org/licenses/>.

using System.Collections.Generic;
using System.IO;
using System.Linq;

namespace Byond.EnsembleLibrary
{
	public class LibraryFolder : LibraryItem
	{
		private readonly DirectoryInfo _di;

		public LibraryFolder(DirectoryInfo di)
			: base(di.FullName)
		{
			_di = di;
			Refresh();
		}

		public bool IsRoot { get { return Parent == null; } }
		public LibraryFolder Parent { get; private set; }
		public IEnumerable<LibraryFolder> Folders { get; private set; }
		public IEnumerable<LibraryItem> Items { get; private set; }

		public bool IsEmpty { get { return !Folders.Any() && !Items.Any(); } }

		public void Refresh()
		{
			Items = CreateItems(_di);

			Folders = CreateFolders(_di);
			foreach (var child in Folders)
				child.Parent = this;
		}

		private static IEnumerable<LibraryItem> CreateItems(DirectoryInfo di)
		{
			return di
				.GetFiles("*" + Library.PatchFileExtension)
				.Select(fileInfo => new LibraryItem(fileInfo.FullName))
				.ToList();
		}

		private static IEnumerable<LibraryFolder> CreateFolders(DirectoryInfo di)
		{
			return di
				.GetDirectories("*", SearchOption.TopDirectoryOnly)
				.Select(directoryInfo => new LibraryFolder(directoryInfo))
				.ToList();
		}
	}
}